﻿using System.Collections.Generic;
using LFloatMath.Math;


namespace IQIGame.Onigao.Logic
{
    public partial class SkillEffective_Buff_ConfigData : SkillCustomConfig
    {
        public FormulaConfig buffID;
        public FormulaConfig stack;
        public FormulaConfig param;
        public bool remove;
    }
    
    public partial class SkillEffective_ExtendBuffDuration_ConfigData : SkillCustomConfig
    {
        public FormulaConfig buffID;
        public FormulaConfig extend;
    }

    public partial class SkillEffective_Damage_ConfigData : SkillCustomConfig
    {
        public int hitFormula;
        public int critFormula;
        public int damageFormula;
        public bool checkDead;
    }

    public partial class SkillEffective_InsertSkill_ConfigData : SkillCustomConfig
    {
        public int skillID;
    }

    public partial class SkillEffective_HpToShield_ConfigData : SkillCustomConfig
    {
        public int hpFormula;
        public long shieldRate;
        public int shieldBuffID;
    }

    public partial class SkillEffective_Cure_ConfigData : SkillCustomConfig
    {
        public int cureFormula;
    }

    public partial class SkillEffective_CureToShield_ConfigData : SkillCustomConfig
    {
        public int cureFormula;
        public long shieldRate;
        public int shieldDuration;
    }

    public partial class SkillEffective_ExtraDamage_ConfigData : SkillCustomConfig
    {
        public int damageFormula;
        public bool checkDead;
    }

    public partial class SkillEffective_CustomProperty_ConfigData : SkillCustomConfig
    {
        public int propertyKey;
        public string customKey;
        public FormulaConfig value;
        public int type;
    }

    public partial class SkillEffective_Relive_ConfigData : SkillCustomConfig
    {
        public int cureFormula;
    }
    
    public partial class SkillEffective_Package_ConfigData : SkillCustomConfig
    {
        public List<SkillActionNode> actions = new List<SkillActionNode>();
    }

    public partial class SkillEffective_RepalceBuffDotType_ConfigData : SkillCustomConfig
    {
        public int dotType;
    }
    
    public partial class SkillEffective_ExtraTurn_ConfigData : SkillCustomConfig
    {
        public int count;
        public bool remove;
    }
    
    public partial class SkillEffective_DamageTempModify_ConfigData : SkillCustomConfig
    {
        public FormulaConfig damageModify;
        public FormulaConfig hurtModify;
    }

    public partial class SkillEffective_ReplaceTargetSelect_ConfigData : SkillCustomConfig
    {
        public TargetSelectConfig select;
    }
    
    public partial class SkillEffective_RepalceSkillType_ConfigData : SkillCustomConfig
    {
        public int skillType;
    }
    
    public partial class SkillEffective_Prefab_ConfigData : SkillCustomConfig
    {
        public string prefab;
        
        // Runtime数据 不序列化
        public long guid;
        public SkillEffective_Package_ConfigData package;
    }

    public partial class SkillEffective_PrefabSource_ConfigData : SkillCustomConfig
    {
        public string key;
        public string prefabPath;
        public SkillEffective_Package_ConfigData prefab;
    }
    
    public partial class SkillEffective_Charge_ConfigData : SkillCustomConfig
    {
        public int chargeDuration;
        public int castSkill;
        public string chargePrefab;
    }
    
    public partial class SkillEffective_Impact_ConfigData : SkillCustomConfig
    {
        public long maxLength;
        public long speed;
        public int checkNum; // 射线检测精度，默认是1 除了中间外，左右各需要检测几条
        public int targetRelation;
        public List<SkillActionNode> actions = new List<SkillActionNode>();
    }
    
    public partial class SkillEffective_Totem_ConfigData : SkillCustomConfig
    {
        public bool deadWithSummoner;
        public long range;
        public EActiveType activeType;
        public ETargetRelation targetRelation;
        public string effectName;
        public List<SkillActionNode> actions = new List<SkillActionNode>();
        public int duration;
        
        public enum EActiveType
        {
            Now,
            RoundEnd,
            RoundStart
        }
    }
}